#include <algorithm>
#include <iostream>
#define LL long long
using namespace std;

const int kMaxN = 3010;
const int kMod = 998244353;

int QuickPow(int a, int b) {
  int ret = 1;

  for (; b; b >>= 1) {
    if (b & 1) {
      ret = (long long)ret * a % kMod;
    }
    a = (long long)a * a % kMod;
  }
  return ret;
}

void Add(int& a, int b, int c) {
  a = (a + (long long)b * c) % kMod;
}

int f[2][kMaxN];

void Solve(int n) {
  int inv2 = QuickPow(2, kMod - 2);
  int last = 1, now = 0;

  f[1][1] = 1;
  for (int i = 2; i <= n; i++) {
    int a = inv2, b = 0, x;
    for (int j = 2; j <= i; j++) {
      a = (LL)a * inv2 % kMod;
      b = (LL)(b + f[last][j - 1]) * inv2 % kMod;
    }
    x = (LL)(kMod - b) * QuickPow(a - 1, kMod - 2) % kMod;
    f[now][1] = (LL)x * inv2 % kMod;
    for (int j = 2; j <= i; j++) {
      f[now][j] = (LL)(f[now][j - 1] + f[last][j - 1]) * inv2 % kMod;
    }
    swap(last, now);
  }
  for (int i = 1; i <= n; i++) {
    cout << f[last][i] << " ";
  }
  cout << "\n";
}

int main() {
  ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  int n;
  cin >> n;
  Solve(n);
  return 0;
}